/*
 * @Author: cq
 * @LastEditors: cq
 * @Date: 2025-05-07 15:20:46
 * @LastEditTime: 2025-09-22 11:39:31
 * @FilePath: \hm-dianping\src\main\java\com\hmdp\config\MvcConfig.java
 */
package com.hmdp.config;

import com.hmdp.utils.LoginInterceptor;
import com.hmdp.utils.RefreshTokenInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Autowired
    private RefreshTokenInterceptor refreshTokenInterceptor;
    @Autowired
    private LoginInterceptor loginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
//                设置拦截器的拦截路径
                .addPathPatterns("/user/me","/user/sign","/voucher-order/**","/blog/**","/follow/**")
//                设置不拦截路径
                // "/blog" 只会匹配 /blog 这个接口本身
                // "/blog/*" 会匹配 /blog/xxx（如 /blog/1），但不会匹配多级路径
                // "/blog/**" 会匹配 /blog 及其所有子路径（如 /blog/1、/blog/1/like）
                // 如果只想放行 /blog/{id} 这种单层路径（如 /blog/1），可以用 "/blog/*"
                // 如果只想放行 /blog 这个接口本身，则加 "/blog"
                .excludePathPatterns(
                        "/user/code",
                        "/user/login",
                        "/upload/**",
                        "/blog/hot",
                        "/blog/*", // 放行 /blog/{id}，但不放行 /blog
                        "/shop/**",
                        "/shop-type/**",
                        "/voucher/**"
                ).order(1);
//        order的值越小越先执行
        registry.addInterceptor(refreshTokenInterceptor)
//                设置拦截器的拦截路径
//                拦截所有的url，使得不管是发起什么请求，只要带了token都要刷新token的redis有效时间
                .addPathPatterns("/**").order(0);

    }
}
